package innerclassdemo;

/**
 * Created with IntelliJ IDEA
 * Description
 * User：chenshu
 * Date：2023-10-18
 * Time：20:12
 */
public class TestDemo {
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
        outerClass.methodOut();
        System.out.println("===================");
        innerClass.method();
    }
}


class OuterClass {
    public int data1 = 10;
    public int data2 = 20;
    public static int data3 = 30;
    private int data4 = 4;

    /**
     * 实例内部类：
     * 1、实例化内部类：外部类名.内部类名 变量 = 外部类对象的引用.new InnerClass();
     * 2、实例内部类当中不能定义静态成员变量
     * public  static final int data6 = 60;必须是编译时确定的值
     * 3、不能定义静态方法
     * 4、变量重名如何访问外部类的成员变量：实例内部类不仅有自身的this，还有外部类的this和内部类的this
     * 5、外部类所有成员都能在实例内部类中被访问
     * 6、外部类需要实例化内部类对象才能访问内部类成员
     */
    class InnerClass {
        public int data1 = 1000;
        public int data4 = 40;
        private int data5 = 50;
       public  static final int data6 = 60;
        public InnerClass() {
            System.out.println("InnerClass的构造方法");
        }
        public void method() {
            System.out.println("这是内部类的方法");
            System.out.println("外部类data1：" + OuterClass.this.data1);
            System.out.println(data1);
            System.out.println(data2);
            System.out.println(data3);
            System.out.println("外部类data4(private)：" + OuterClass.this.data4);
            System.out.println(data4);
            System.out.println(data5);
            System.out.println(data6);
            System.out.println("InnerClass的一个方法");
        }
    }

    public void methodOut() {
        System.out.println("这是外部类的方法");
        System.out.println("内部类data1：" + data1);
        System.out.println("内部类data5(private)：" + new InnerClass().data5);
    }
}